﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RepositorioSATT;
using DominioSATT;

namespace ServiceSATT
{
    public class LoginService : ILoginService
    {
        #region Miembros de ILoginService
        ILoginRepositorio repositorio;

        ///<summary>
        /// Valida contenido ingresado por el usuario para loguearse al sistema
        ///</summary>
        public void Validar(IInterfazLogin ui)
        {
            if (!this.ValidarContenido(ui.Usuario))
            {
                repositorio = new LoginRepositorio();
                Login bLog = repositorio.GetLogin(ui.Usuario);
                if (bLog.Password == ui.Password)
                {
                    if (!bLog.Estado)
                        throw new ServicioExeption("El Usuario se encuentra deshabilitado. Contacte a su Administrador.");
                    else
                    {
                        ui.Estado = bLog.Estado;
                    }
                }
                else
                    throw new ServicioExeption("Datos de Login incorrectos.");
            }
            else
                throw new ServicioExeption("QUE LE METES SQL INJECTION GIL");
        }


        ///<summary>
        /// Actualiza loso datos de Login para una Persona existente
        ///</summary>
        public void Actualizar(IInterfazLogin ui)
        {
            if (!this.ValidarContenido(ui.Usuario))
            {
                repositorio = new LoginRepositorio();
                Login bLogin = repositorio.GetLogin(ui.Dni);
                if(bLogin != null)
                {
                    Login nLog = new Login(ui.Dni, ui.Usuario, ui.Password, ui.Estado);
                    repositorio.Actualizar(nLog);
                }
                else
                {
                    Login nLog = new Login(ui.Dni, ui.Usuario, ui.Password, ui.Estado);
                    repositorio.Agregar(nLog);
                }
            }
            else
                throw new ServicioExeption("QUE LE METES SQL INJECTION GIL");
        }

        ///<summary>
        /// Metodo Privado. Valida el contenido ingresado por el usuario
        ///</summary>
        bool ValidarContenido(string Cadena)
        {
            bool exito = false;
            Cadena = Cadena.ToLower();
            string[] sBadChars = new string[] { "select", "drop", "count", "insert", "delete" };
            foreach(string valor in sBadChars)
            {
                if (!exito)
                    if (Cadena.Contains(valor))
                        exito = true;
            }
            return exito;
        }

        public void Buscar(IInterfazLogin ui)
        {
            repositorio = new LoginRepositorio();
            Login bLogin = repositorio.GetLogin(ui.Dni);
            ui.Usuario = bLogin.Usuario;
            ui.Password = bLogin.Password;
        }

        public void ListarEmpleados(IInterfazLogin ui)
        {
            repositorio = new LoginRepositorio();
            ui.CantidadEmpleados = repositorio.ListarEmpleados();
        }
        #endregion
    }
}
